<?php

namespace july\julyadmin\builder\traits\actions;

use july\julyadmin\builder\Builder;

/**
 * 基础
 */
trait HasBase
{
    /**
     * 数据模型
     */
    protected $dataModel;

    //页面标题
    public $pageTitle = '页面';
    //添加按钮文字
    public $addText = '添加';
    //编辑按钮文字
    public $editText = '编辑';
    //详情按钮文字
    public $viewText = '详情';
    //开启禁用按钮文字
    public $disabledText = '开启/禁用';
    //删除按钮文字
    public $deleteText = '删除';
    //刷新按钮文字
    public $refreshText = '刷新';
    //自动提交权限名称
    public $autopostText = '表格自动提交';
    //禁止或者开启字段名称
    public $disabledField = 'disabled';
    //开关的开启或关闭对应的文字，第一个参数是开启文字，第二是关闭文字
    public $switchBtnText = ['开启', '关闭'];
    //允许表格行内编辑的字段,如name,sex
    public $allowRowEditField = [];
    //不允许删除的主键数组，如1,2,3
    public $noDeletePrimarykeys = [];
    //不允许编辑的主键数组，如1,2,3
    public $noEditPrimarykeys = [];
    //不允许禁用的主键数组，如1,2,3
    public $noDisabledPrimarykeys = [];
    //主键
    public $pk = 'id';

    /**
     * 获取主键字段名称
     * @return string 返回主键字段名称
     */
    public function getPk()
    {
        if (empty($this->pk)) {
            if ($this->dataModel) {
                $this->pk = $this->dataModel->getPk();
                $this->pk = $this->pk && is_string($this->pk) ? $this->pk : 'id';
            } else {
                $this->pk = 'id';
            }
        }
        return $this->pk;
    }

    /**
     * @param $pk    主键字段
     * @return $this
     */
    public function setPk($pk)
    {
        $this->pk = $pk;
        return $this;
    }

    /**
     * @return  $builder
     */
    public function builder()
    {
        $builder = new Builder();
        return $builder;
    }

    /**
     * 保存
     * @param  integer $isEdit    是否是编辑
     * @param  array   $data      数据
     * @param  string  $data      主键
     * @param  boolean $allowEdit 是否允许编辑
     * @return
     */
    protected function doSave($isEdit, $data, $pk, $allowEdit = false)
    {
        if (in_array($pk, $this->noEditPrimarykeys) && !$allowEdit) {
            return json(['code' => 0, 'msg' => '当前数据不允许编辑！']);
        }
        if (!$isEdit) {
            if (!$this->dataModel->save($data)) {
                return json(['code' => 0, 'msg' => '保存失败！']);
            } else {
                return json(['code' => 1, 'msg' => '保存成功！']);
            }
        } else {
            $find = $this->dataModel->where([$this->getPk() => $pk])->find();
            if (!$find) {
                return json(['code' => 0, 'msg' => '编辑的数据不存在！']);
            } else {
                if (!$find->save($data)) {
                    return json(['code' => 0, 'msg' => '保存失败！']);
                } else {
                    return json(['code' => 1, 'msg' => '保存成功！']);
                }
            }
        }
    }
}
